<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div><h1 id="vim-">Vim 快速入门</h1>
<h2 id="labdoc-header-0">一、实验介绍</h2>
<h3 id="labdoc-header-1">1.1 实验内容</h3>
<p>本次实验将学习vim中的不同模式和一些基本操作。</p><h3 id="labdoc-header-2">1.2 实验知识点</h3>
<ul>
<li>Vim中的六种基本模式</li>
<li>Vim中的基本操作</li>
</ul>
<h3 id="labdoc-header-3">1.3 课程来源</h3>
<p><a href="http://vimdoc.sourceforge.net/htmldoc/usr_toc.html" target="_blank">VIM 在线手册</a></p><h2 id="labdoc-header-4">二、实验步骤</h2>
<h3 id="labdoc-header-5">2.1 vim模式介绍</h3>
<p>以下介绍内容来自维基百科<a href="http://zh.wikipedia.org/wiki/Vim" target="_blank">Vim</a></p><p>从vi演生出来的Vim具有多种模式，这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式，并且大多数的编辑器使用了与Vim截然不同的方式：命令目录（鼠标或者键盘驱动），组合键（通常通过control键（CTRL）和alt键（ALT）组成）或者鼠标输入。Vim和vi一样，仅仅通过键盘来在这些模式之中切换。这就使得Vim可以不用进行菜单或者鼠标操作，并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。</p><p>Vim具有6种基本模式和5种派生模式，我们这里只简单介绍下6种基本模式：</p><ul>
<li>普通模式(Normal mode)</li>
</ul>
<blockquote>
<p>在普通模式中，用的编辑器命令，比如移动光标，删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反（大多数编辑器默认模式为插入模式）。</p></blockquote>
<blockquote>
<p>Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令<code>dd</code>删除当前行，但是第一个"d"的后面可以跟另外的移动命令来代替第二个<code>d</code>，比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数，<code>2dd</code>（重复<code>dd</code>两次），和<code>dj</code>的效果是一样的。用户学习了各种各样的文本间移动／跳转的命令和其他的普通模式的编辑命令，并且能够灵活组合使用的话，能够比那些没有模式的编辑器更加高效的进行文本编辑。</p></blockquote>
<blockquote>
<p>在普通模式中，有很多方法可以进入插入模式。比较普通的方式是按<code>a</code>（append／追加）键或者<code>i</code>（insert／插入）键。</p></blockquote>
<ul>
<li>插入模式(Insert mode)</li>
</ul>
<blockquote>
<p>在这个模式中，大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。</p></blockquote>
<blockquote>
<p>在插入模式中，可以按<code>ESC</code>键回到普通模式。</p></blockquote>
<ul>
<li>可视模式(Visual mode)</li>
</ul>
<blockquote>
<p>这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时，命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。</p></blockquote>
<ul>
<li>选择模式(Select mode)</li>
</ul>
<blockquote>
<p>这个模式和无模式编辑器的行为比较相似（Windows标准文本控件的方式）。这个模式中，可以用鼠标或者光标键高亮选择文本，不过输入任何字符的话，Vim会用这个字符替换选择的高亮文本块，并且自动进入插入模式。</p></blockquote>
<ul>
<li>命令行模式(Command line mode)</li>
</ul>
<blockquote>
<p>在命令行模式中可以输入会被解释成并执行的文本。例如执行命令（<code>:</code>键），搜索（<code>/</code>和<code>?</code>键）或者过滤命令（<code>!</code>键）。在命令执行之后，Vim返回到命令行模式之前的模式，通常是普通模式。</p></blockquote>
<ul>
<li>Ex模式(Ex mode)</li>
</ul>
<blockquote>
<p>这和命令行模式比较相似，在使用<code>:visual</code>命令离开Ex模式前，可以一次执行多条命令。</p></blockquote>
<blockquote>
<p>这其中我们常用到就是普通模式、插入模式和命令行模式，本课程也只涉及这三个常用模式的内容</p></blockquote>
<h3 id="labdoc-header-6">2.2 三种常用模式的切换</h3>
<p>vim启动进入普通模式，处于插入模式或命令行模式时只需要按<code>Esc</code>或者<code>Ctrl+[</code>(这在vim课程环境中不管用)即可进入普通模式。普通模式中按<code>i</code>（插入）或<code>a</code>（附加）键都可以进入插入模式，普通模式中按<code>:</code>进入命令行模式。命令行模式中输入<code>wq</code>回车后保存并退出vim。</p><p></p><h3 id="labdoc-header-7">2.3 进入vim</h3>
<h4 id="2-3-1-vim-vim-">2.3.1 使用vim命令进入vim界面</h4>
<p>vim后面加上你要打开的已存在的文件名或者不存在（则作为新建文件）的文件名。
打开Xfce终端，输入以下命令</p><pre><code class="line-numbers language-js"><span class="hljs-meta">$</span><span class="bash"> vim practice_1.txt</span>
</code></pre><p>直接使用vim也可以打开vim编辑器，但是不会打开任何文件。</p><pre><code class="line-numbers language-js"><span class="hljs-meta">$</span><span class="bash"> vim</span>
</code></pre><p>进入命令行模式后输入<code>:e 文件路径</code> 同样可以打开相应文件。</p><h4 id="2-3-2-">2.3.2 游标移动</h4>
<p>在进入vim后，按下<code>i</code>键进入插入模式。在该模式下您可以输入文本信息,下面请输入如下三行信息：</p><pre><code class="hljs css">12345678
<span class="hljs-selector-tag"><span class="hljs-selector-tag">abcdefghijk</span></span>
<span class="hljs-selector-tag"><span class="hljs-selector-tag">bestqd</span></span><span class="hljs-selector-class"><span class="hljs-selector-class">.com</span></span>
</code></pre><p>按<code>Esc</code>进入普通模式，在该模式下使用方向键或者<code>h</code>,<code>j</code>,<code>k</code>,<code>l</code>键可以移动游标。</p><table>
<thead>
<tr>
<th>按键</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>h</code></td>
<td>左</td>
</tr>
<tr>
<td><code>l</code></td>
<td>右（小写L）</td>
</tr>
<tr>
<td><code>j</code></td>
<td>下</td>
</tr>
<tr>
<td><code>k</code></td>
<td>上</td>
</tr>
<tr>
<td><code>w</code></td>
<td>移动到下一个单词</td>
</tr>
<tr>
<td><code>b</code></td>
<td>移动到上一个单词</td>
</tr>
</tbody>
</table>
<p>请尝试在普通模式下使用方向键移动光标到<code>bestqd</code>这几个字母上面。</p><h3 id="labdoc-header-8">2.4 进入插入模式</h3>
<h4 id="2-4-1-">2.4.1进入插入模式</h4>
<p>在普通模式下使用下面的键将进入插入模式，并可以从相应的位置开始输入</p><table>
<thead>
<tr>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>i</code></td>
<td>在当前光标处进行编辑</td>
</tr>
<tr>
<td><code>I</code></td>
<td>在行首插入</td>
</tr>
<tr>
<td><code>A</code></td>
<td>在行末插入</td>
</tr>
<tr>
<td><code>a</code></td>
<td>在光标后插入编辑</td>
</tr>
<tr>
<td><code>o</code></td>
<td>在当前行后插入一个新行</td>
</tr>
<tr>
<td><code>O</code></td>
<td>在当前行前插入一个新行</td>
</tr>
<tr>
<td><code>cw</code></td>
<td>替换从光标所在位置后到一个单词结尾的字符</td>
</tr>
</tbody>
</table>
<p>请尝试不同的从普通模式进入插入模式的方法，在最后一行bestqd前面加上<code>www.</code>，<strong>注意每次要先回到普通模式才能切换成以不同的方式进入插入模式</strong></p><h3 id="labdoc-header-9">2.5 保存文档</h3>
<h4 id="2-5-1-">2.5.1 命令行模式下保存文档</h4>
<p>从普通模式输入<code>:</code>进入命令行模式，输入<code>w</code>回车，保存文档。输入<code>:w 文件名</code>可以将文档另存为其他文件名或存到其它路径下</p><h3 id="labdoc-header-10">2.6 退出vim</h3>
<h4 id="2-6-1-vim">2.6.1 命令行模式下退出vim</h4>
<p>从普通模式输入<code>:</code>进入命令行模式，输入<code>wq</code>回车，保存并退出编辑</p><p>以下为其它几种退出方式：</p><table>
<thead>
<tr>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>:q!</code></td>
<td>强制退出，不保存</td>
</tr>
<tr>
<td><code>:q</code></td>
<td>退出</td>
</tr>
<tr>
<td><code>:wq!</code></td>
<td>强制保存并退出</td>
</tr>
<tr>
<td><code>:w &lt;文件路径&gt;</code></td>
<td>另存为</td>
</tr>
<tr>
<td><code>:saveas 文件路径</code></td>
<td>另存为</td>
</tr>
<tr>
<td><code>:x</code></td>
<td>保存并退出 </td>
</tr>
<tr>
<td><code>:wq</code></td>
<td>保存并退出</td>
</tr>
</tbody>
</table>
<h4 id="2-6-2-vim">2.6.2 普通模式下退出vim</h4>
<p>普通模式下输入<code>Shift+zz</code>即可保存退出vim</p><h3 id="labdoc-header-11">2.7 删除文本</h3>
<h4 id="2-7-1-vim-">2.7.1 普通模式下删除vim文本信息</h4>
<p>进入普通模式，使用下列命令可以进行文本快速删除：</p><table>
<thead>
<tr>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>x</code></td>
<td>删除游标所在的字符</td>
</tr>
<tr>
<td><code>X</code></td>
<td>删除游标所在前一个字符</td>
</tr>
<tr>
<td><code>Delete</code></td>
<td>同<code>x</code></td>
</tr>
<tr>
<td><code>dd</code></td>
<td>删除整行</td>
</tr>
<tr>
<td><code>dw</code></td>
<td>删除一个单词（不适用中文）</td>
</tr>
<tr>
<td><code>d$</code>或<code>D</code></td>
<td>删除至行尾</td>
</tr>
<tr>
<td><code>d^</code></td>
<td>删除至行首</td>
</tr>
<tr>
<td><code>dG</code></td>
<td>删除到文档结尾处</td>
</tr>
<tr>
<td><code>d1G</code></td>
<td>删至文档首部</td>
</tr>
</tbody>
</table>
<p>除此之外，你还可以在命令之前加上数字，表示一次删除多行，如：</p><p><code>2dd</code>表示一次删除2行</p><p>我们来做如下练习：</p><pre><code class="line-numbers language-js"><span class="hljs-meta">$</span><span class="bash"> cp /etc/protocols .</span>
<span class="hljs-meta">$</span><span class="bash"> vim protocols</span>
</code></pre><p></p><h2 id="labdoc-header-12">三、实验总结</h2>
<p>vim初体验你是不是觉得很奇妙呢，或许目前你还没有vim产生任何好感，不觉得它是一款优秀的编辑器，那只能是因为你还没能掌握vim的精髓，或者是<strong>你打字太慢，回去在小霸王学习机上再练练吧-_-||</strong>。这里也可以先透露下，vim的精髓就在于命令键的组合，全键盘的操作，可以使你手不离开键盘输入区域即可完成所有的操作，那可真是即高效又炫酷的体验啊，当你掌握这项技能绝对可以秒掉其它不会用vim的程序员几条街(起码在气势上吧，当然还要除掉哪些只会<a href="https://zh.wikipedia.org/wiki/Emacs" target="_blank">Emacs</a>的程序员,因为Emacs与Vim之间有场战争Emacs和Vim：神的编辑器和编辑器之神</a>)</p><h2 id="labdoc-header-13">四、思考练习</h2>
<p>为什么vim会使用这么奇葩的方向键<code>h</code>,<code>j</code>,<code>k</code>,<code>l</code>及那么别扭反人类的<code>Esc</code>作为退出插入模式的键。给点提示：你可以了解下这货<a href="http://en.wikipedia.org/wiki/ADM-3A" target="_blank">ADM-3A</a></p></div>
</body>
</html>